package com.ruoyi.rulengine.service;

import com.ruoyi.iotcommon.domain.DeviceDataMessage;
import com.ruoyi.rulengine.domain.Rule;
import com.ruoyi.rulengine.domain.RuleLog;

import java.util.List;
import java.util.concurrent.CompletableFuture;

public interface IRuleEngineService {


    /**
     * 从数据库查询设备的规则列表
     * @param deviceData
     * @return
     */
    void getRules(DeviceDataMessage deviceData); 
    /**
     * 异步评估规则并执行动作
     *
     * @param rules      规则列表
     * @param deviceData 设备上报数据
     */
    CompletableFuture<Void> evaluateRules(List<Rule> rules, DeviceDataMessage deviceData);


    /**
     * 异步评估条件列表
     * @param logic      条件逻辑（AND 或 OR）
     * @param deviceData 设备上报数据
     * @return 是否满足条件
     */
    CompletableFuture<Boolean> evaluateConditions(Rule rule, String logic, DeviceDataMessage deviceData);


    void executeActions(Rule rule, DeviceDataMessage deviceData);


    RuleLog createRuleLog(Rule rule, DeviceDataMessage deviceData, String status);
}
